#include <iostream>
#include <vector>
#include <queue>
using namespace std;

template <typename type>
class minQueue {
public:
	void push(const type&);
	type front();
	void pop();
	type extractMin();
	bool empty() {
		return que.empty();
	}
private:
	queue<type> que;
	vector<type> minque;
};
template <typename type>
void minQueue<type>::push(const type& item) {
	que.push(item);
	while (!minque.empty() && minque.back() > item) {
		minque.pop_back();
	}
	minque.push_back(item);
}
template <typename type>
type minQueue<type>::front() {
	return que.front();
}
template <typename type>
void minQueue<type>::pop() {
	type item = que.front(); que.pop();
	if (item == minque.front()) {
		minque.erase(minque.begin());
	}
}
template <typename type>
type minQueue<type>::extractMin() {
	return minque.front();
}

int main() {
	minQueue<int> minq;
	int item;
	for (int i = 0; i != 10; ++i) {
		cin >> item;
		minq.push(item);
	}
	while (!minq.empty()) {
		cout << "current minval: " << minq.extractMin() << endl;
		minq.pop();
	}
	return 0;
}
